package com.ken.quartz.timer;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;

/**
 * Created by renchongyu on 2018/11/25.
 */
public class MyTimer {
    public static void main(String[] args){
        //创建一个timer实例
        Timer timer = new Timer();
        //创建一个MyTimer实例
        MyTimerTask task = new MyTimerTask("No.1");
        //通过timer定时定频率调用myTimerTask的业务逻辑

        //1.既第一次执行是再当前时间的两秒以后，之后每隔一秒钟执行一次
        //timer.schedule(task,2000l,1000l);

        /**
         * 获取当前时间，并且设置距离当前时间三秒之后的时间
         * 如当前时间是2016-11-10 23：59：57
         * 则设置后的时间为2016-11-11 00:00:00
         */
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(calendar.getTime()));
        //添加三秒后的时间
        calendar.add(Calendar.SECOND,3);
        //---------以下是schedule的用法--------------
        /**
         * 1、在时间等于或超过time的时候执行且仅执行一次task
         * 如在2016-11-11 00:00:00执行一次task，打印任务名字

        task.setName("schedule1");
        timer.schedule(task,calendar.getTime());
         */

        /**
         * 2、在时间等于或超过time的时候首次执行task，
         * 之后每隔period毫秒重复执行一次task
         * 如在2016-11-11 00:00:00第一次执行task，打印任务名字
         * 之后每隔两秒钟执行一次task

        task.setName("schedule2");
        timer.schedule(task,calendar.getTime(),2000);
         */

        /**
         * 3、等待delay毫秒后执行且仅执行一次task
         * 如现在2016-11-11 00:00:00
         * 则在2016-11-11 00:00:00执行一次task，打印任务名字
         */
        task.setName("schedule3");
        timer.schedule(task,1000);

        /**
         * 4.等待delay毫秒后首次执行task，之后每隔period毫秒重复执行一次task
         * 如现在是2016-11-11 00:00:00
         * 则在2016-11-11 00:00:01第一次执行task：打印任务名字
         * 之后每隔两秒执行一次task

        task.setName("schedule4");
        timer.schedule(task,3000,2000);
         */
        //==============scheduleAtFixedRate=================
        /**
         * 1. 同schedule3

        task.setName("scheduleAtFixedRate1");
        timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
        */
        /**
         * 2. 同schedule4
         */
        task.setName("scheduleAtFixedRate2");
        timer.scheduleAtFixedRate(task,3000,2000);
        //返回此任务最近实际执行的已安排执行的时间
        System.out.println("schedule time is"+task.scheduledExecutionTime());
    }
}
